package com.zmn.oms.dubbo.dto.zmn.order;

import com.zmn.oms.common.dto.OmsBaseOperator;
import com.zmn.oms.dubbo.dto.zmn.serviceitem.OrderServiceItemDIO;
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 类描述：新订单
 *
 * @author liuying
 * @date 2018/11/07 15:06
 */
@Data
public class NewOrderDIO extends OmsBaseOperator implements Serializable {

    /**
     * 平台
     */
    private Integer plat;

    /**
     * ip
     */
    private String ip;

    /**
     * 渠道ID
     */
    @NotNull(message = "渠道不能为空")
    private Integer channelId;

    /**
     * 公司 ID
     */
    private Integer companyId;

    /**
     * 服务公司(服务商)ID
     */
    private Integer manageCompanyId;

    /**
     * 城市id
     */
    @NotNull(message = "城市不能为空")
    private Integer cityId;

    /**
     * 订单类型：1 新单、2 返修单
     */
    @NotNull(message = "订单类型不能为空")
    private Integer type;

    /**
     * 预约时间
     */
    private Date dutyTime;

    /**
     * 客户名称
     */
    private String userName;

    /**
     * 性别：1 男; 2 女; 3 保密
     */
    private Integer gender;

    /**
     * 街道
     */
    private String street;

    /**
     * 客户地址具体门牌号
     */
    private String address;

    /**
     * 客户电话1
     */
    @NotEmpty(message = "用户电话不能为空")
    private String telephone;

    /**
     * 客户电话2
     */
    private String telephone2;

    /**
     * 客户电话3
     */
    private String telephone3;

    /**
     * 服务分类id
     */
    @NotNull(message = "服务分类不能为空")
    private Integer servCategId;

    /**
     * 产品分类id（二级分类）
     */
    //@NotNull(message = "产品分类不能为空")
    private Integer categId;

    /**
     * 订单客户备注
     */
    @Size(max = 5000, message = "备注最多5000个字符")
    private String remark;

    /**
     * 产品列表
     */
    @NotNull(message = "服务产品不能为空")
    private List<OrderProductDIO> orderProductList;

    /**
     * 接单时间
     */
    private Date assignConfirmTime;

    /**
     * 返修订单ID
     */
    private Long reworkId;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 经度
     */
    private Double longitude;

    /**
     * 纬度
     */
    private Double latitude;

    /**
     * 预付金
     */
    private Integer prepayAmount;

    /**
     * 一口价 1 否 2 是
     */
    private Integer finalPrice;

    /**
     * 支付方式 1 先付 2 后付
     */
    private Integer payType;

    /**
     * 订单优惠信息
     * @see NewOrderDIO#discountItemCodes
     */
    @Deprecated
    private List<OrderDiscountDIO> orderDiscountList;

    /**
     * 优惠券码
     */
    private List<String> discountItemCodes;

    /**
     * 优惠调用发起者，1系统，2用户
     */
    private Integer discountInvoker;

    /**
     * 促销id
     */
    private Integer promId;

    /**
     * 订单服务项
     */
    private List<OrderServiceItemDIO> orderServiceItemList;

    /**
     * 服务项类型，目前仅支持两种类型： 1.工单服务项 2.故障服务项
     * 若值不等于2，则均作为值等于1处理
     * @see com.zmn.oms.common.constant.OrderConsts#SERVICE_ITEM_TYPE_ORDER
     * @see com.zmn.oms.common.constant.OrderConsts#SERVICE_ITEM_TYPE_FAULT
     */
    private Integer servItemType;

    /**
     * 故障项报价ID
     */
    private Integer quotationId;

    /**
     * 推荐人id
     */
    private Long recommenderId;

    /**
     * 推荐人类型 3 工程师
     */
    private Integer recommenderType;

    /**
     * 来源渠道id
     */
    private Integer sourceChannelId;

    /**
     * 入口类型
     * @see com.zmn.consts.GateTypeConsts
     */
    private Integer receiveEntranceType;

    /**
     * 下单入口id
     * @see  com.zmn.consts.GateTypeConsts
     */
    private Integer receiveEntranceId;

    /**
     * 预约工程师 （是否选择换工程师 1为更换 2为不更换）
     */
    private Integer dutyMasterId;

    /**
     * 下单 百度场景id，百度消息必须条件
     */
    private String sceneId;

    /**
     * 小程序议价标示 1、为确认报价  2、为议价价格报价清单
     */
    private Integer negotiatedPriceFlag;


}
